from django.http import QueryDict
from django.template import Library, TemplateSyntaxError
from django.conf import settings
import copy
from django.template.base import kwarg_re

register = Library()

"""
@register.inclusion_tag 是 Django 提供的一个装饰器，用于将一个函数注册为包含标签（inclusion tag）。包含标签是一种特殊的模板标签，它允许你将一个函数的返回值作为上下文数据传递给指定的模板文件，并将该模板文件的渲染结果插入到调用该标签的位置。
"tag/nb_menu.html" 是指定的模板文件路径，Django 会在模板目录中查找该文件，并使用 nb_menu 函数返回的上下文数据进行渲染。
"""
@register.inclusion_tag("tag/fc_menu.html")
def fc_menu(request):
    # 1.读取当前用户的角色信息
    # print(request.nb_user.role)

    # 2.菜单信息
    """
    copy.deepcopy()：
    copy 是 Python 标准库中的模块，deepcopy() 方法能够对对象进行深拷贝。深拷贝意味着会创建一个新的对象，并且递归地复制对象的所有属性，新对象和原对象是完全独立的，对新对象的修改不会影响原对象。
    在这个代码里运用深拷贝的目的是，防止在后续对 user_menu_list 进行修改时，影响到 settings.NB_MENU 里的原始数据。
    :param request:
    :return:
    """
    user_menu_list = copy.deepcopy(settings.FC_MENU[request.fc_user.role])

    for item in user_menu_list:
        for child in item['children']:
            if child['name'] == request.fc_user.menu_name:
                child['class'] = 'active'

    return {'menu_list': user_menu_list}